﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio;
using Entidad;
using System.Globalization;
using SpreadsheetLight;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using System.IO;
using System.Configuration;

namespace WebProveedores
{
    public partial class _Default : System.Web.UI.Page
    {
        public EnUsuario objUsuario = new EnUsuario();
        protected void Page_Load(object sender, EventArgs e)
        {
            //0 no es intranet, 1 es intranet
            string intranet = ConfigurationManager.AppSettings["intranet"].ToString();
            
            if (!IsPostBack)
            {
                Session["regPorPagina"] = 30;
                lnkAsigSocie.Visible = false;
                lnkAdminUsua.Visible = false;
                if (intranet.Equals("0"))//extranet
                {
                    lblTotalPags.Text = "0";
                    if (Session["proveedor"] == null)
                    {
                        Response.Redirect("Login.aspx");
                    }
                    //txtCalendar.Text = DateTime.Now.AddDays(-30).ToShortDateString();
                    txtCalendar.Text = DateTime.Now.AddDays(-30).ToString("d", CultureInfo.CreateSpecificCulture("es-ES"));
                    txtHasta.Text = DateTime.Now.ToString("d", CultureInfo.CreateSpecificCulture("es-ES"));
                    EnProveedor proveedor = (EnProveedor)Session["proveedor"];
                    lblProveedor.Text = proveedor.documento_proveedor + " - " + proveedor.descripcion;
                    CargarDatos2(proveedor.lifnr, DateTime.Now.AddDays(-30), DateTime.Now, "", txtFolio.Text, intranet);
                    CargarDatos(proveedor.lifnr, DateTime.Now.AddDays(-30), DateTime.Now, "", txtFolio.Text, intranet, 1, Convert.ToInt32(Session["regPorPagina"]));

                    lnkCambClave.Visible = false;
                }
                else//intranet
                {
                    
                    if (Session["usuario"] == null)
                    {
                        Response.Redirect("LoginIntra.aspx");
                    }
                    else
                    {
                        lblNIF.Visible = true;
                        txtNIF.Visible = true;
                        objUsuario = (EnUsuario)Session["usuario"];
                        if (objUsuario.tipo.Equals("1"))// SI es admin
                        {
                            lnkAsigSocie.Visible = true;
                            lnkAdminUsua.Visible = true;
                        }

                    }
                    EnUsuario usu = (EnUsuario)Session["usuario"];
                    txtCalendar.Text = DateTime.Now.AddDays(-30).ToString("d", CultureInfo.CreateSpecificCulture("es-ES"));//DateTime.Now.AddDays(-30).ToShortDateString();
                    txtHasta.Text = DateTime.Now.ToString("d", CultureInfo.CreateSpecificCulture("es-ES"));
                    lblTotalPags.Text = "0";
                    lblProveedor.Text = "(" + usu.usuario + ") " + usu.nombre + ", " + usu.apellido;
                    CargarDatos2(usu.usuario, DateTime.Now.AddDays(-30), DateTime.Now, "", "", intranet);
                    //CargarDatos(usu.usuario, DateTime.Now.AddDays(-30), DateTime.Now, "", txtFolio.Text, intranet, 1, Convert.ToInt32(Session["regPorPagina"]));
                }
            }
        }
        private void CargarDatos2(string proveedor, DateTime fecha, DateTime fechaf, string sociedad, string folio, string intranet)
        {
            NePagos nep = new NePagos();
            EnUsuario usu = null;
            if (intranet.Equals("1"))
            {
                usu = (EnUsuario)Session["usuario"];
                proveedor = usu.usuario;
                //Label3.Visible = false;
                //txtFolio.Visible = false;
            }
            if (intranet.Equals("1"))
            {
                NeUsuario neu = new NeUsuario();
                List<EnCombo> lstcomb = new List<EnCombo>();
                lstcomb = neu.getSociedadesSiAsigXUsuario(usu.usuario, "c");

                ddlSociedad.DataSource = lstcomb;
                ddlSociedad.DataTextField = "decrip";
                ddlSociedad.DataValueField = "codigo";
                ddlSociedad.DataBind();
            }
            else
            {
                //foreach (var item in soc)
                //{
                //    sc = new sociedad();
                //    sc.codigo_sociedad = item.codigo_sociedad;
                //    sc.descripcion_sociedad = item.descripcion_sociedad;
                //    lst.Add(sc);
                //}
                //ddlSociedad.DataSource = lst;
                //ddlSociedad.DataTextField = "descripcion_sociedad";
                //ddlSociedad.DataValueField = "codigo_sociedad";
                //ddlSociedad.DataBind();
                NeProveedores neu = new NeProveedores();
                List<EnCombo> lstcomb = new List<EnCombo>();
                lstcomb = neu.getSociedadesXProvee(proveedor);

                ddlSociedad.DataSource = lstcomb;
                ddlSociedad.DataTextField = "decrip";
                ddlSociedad.DataValueField = "codigo";
                ddlSociedad.DataBind();

            }
        }
        private void CargarDatos(string proveedor, DateTime fecha, DateTime fechaf, string sociedad,
                                string folio, string intranet, int index, int registrosPorPagina)
        { 
            NePagos nep = new NePagos();
            EnUsuario usu = null;
            int total = 0;
            if (intranet.Equals("1"))
            { 
                usu = (EnUsuario)Session["usuario"];
                proveedor = usu.usuario;
                //Label3.Visible = false;
                //txtFolio.Visible = false;
            }
            List<EnResumenPago> lstR = nep.listarResumen(proveedor, fecha, fechaf, sociedad, folio, intranet, index, registrosPorPagina,ref total, txtNIF.Text);
            ListView1.DataSource = lstR;
            ListView1.DataBind();
            Session["resultado"] = lstR;
            int coc = total % Convert.ToInt32(Session["regPorPagina"]);
            if( coc > 0)
            {
                lblTotalPags.Text =  ((total / Convert.ToInt32(Session["regPorPagina"])) + 1).ToString();
            }else
            {
                lblTotalPags.Text =   ((total / Convert.ToInt32(Session["regPorPagina"]))).ToString();
            }
            
            PopulatePager(total, index);

            ////quedamos con empresas unicas de la lista lstR
            //List<sociedad> lst = new List<sociedad>();
            //sociedad sc = new sociedad();
            //var soc = lstR.Select(x => new { x.codigo_sociedad, x.descripcion_sociedad}).Distinct().ToList();
            //sc.codigo_sociedad = "";
            //sc.descripcion_sociedad = "";
            //lst.Insert(0, sc);

            //if (intranet.Equals("1"))
            //{
            //    NeUsuario neu = new NeUsuario();
            //    List<EnCombo> lstcomb = new List<EnCombo>();
            //    lstcomb = neu.getSociedadesSiAsigXUsuario(usu.usuario,"c");

            //    ddlSociedad.DataSource = lstcomb;
            //    ddlSociedad.DataTextField = "decrip";
            //    ddlSociedad.DataValueField = "codigo";
            //    ddlSociedad.DataBind();
            //}
            //else
            //{
            //    NeProveedores neu = new NeProveedores();
            //    List<EnCombo> lstcomb = new List<EnCombo>();
            //    lstcomb = neu.getSociedadesXProvee(proveedor);

            //    ddlSociedad.DataSource = lstcomb;
            //    ddlSociedad.DataTextField = "decrip";
            //    ddlSociedad.DataValueField = "codigo";
            //    ddlSociedad.DataBind();

            //}
        }

        protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            if (e.Item.ItemType == ListViewItemType.DataItem)
            {
                ListViewDataItem lvItem = (ListViewDataItem)e.Item;
                EnResumenPago cus = (EnResumenPago)lvItem.DataItem;
                if (cus != null)
                {
                    GridView gv1 = (GridView)e.Item.FindControl("GridView1");
                    if (gv1 != null)
                    {
                        gv1.RowDataBound += new GridViewRowEventHandler(gv_RowDataBound);
                        gv1.DataSource = cus.detalle_pago;
                        gv1.DataBind();
                    }
                }
            }
        }

        protected void imgActualizar_Click(object sender, ImageClickEventArgs e)
        {
            //0 no es intranet, 1 es intranet
            string intranet = ConfigurationManager.AppSettings["intranet"].ToString();
            DateTime fec = DateTime.ParseExact(txtCalendar.Text.ToString(), "dd/MM/yyyy", null);
            DateTime fecs = DateTime.ParseExact(txtHasta.Text.ToString(), "dd/MM/yyyy", null);
            //ClientScript.RegisterStartupScript(this.GetType(), "Resultado", "alert('" + fec + "----" + txtCalendar.Text.ToString() + "');", true);
            CargarDatos(intranet.Equals("0") ? ((EnProveedor)Session["proveedor"]).lifnr : "",
            fec, fecs
            , ddlSociedad.SelectedItem.Text, txtFolio.Text, intranet, 1, Convert.ToInt32(Session["regPorPagina"]));
        }

        void gv_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton addButton = (ImageButton)e.Row.FindControl("btnImg");
                if (((EnDetallePago)e.Row.DataItem).constancia_detraccion.Equals(""))
                {
                    //para la detraccion                 
                    addButton.Visible = false;
                }
                else
                {
                    EnDetallePago obj = (EnDetallePago)e.Row.DataItem;
                    addButton.Attributes.Add("codigo_sociedad", obj.codigo_sociedad);
                    addButton.Attributes.Add("annio", obj.annio);
                    addButton.Attributes.Add("numero_documento_padre", obj.numero_documento_padre);
                    addButton.Attributes.Add("numero_constancia", obj.constancia_detraccion);
                    addButton.Attributes.Add("posicion", obj.posicion.ToString());
                    addButton.Visible = true;
                }
            }
        }

        /// <summary>
        /// Permite ver el certificado de detraccion
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void addButton_Click(object sender, EventArgs e)
        {
            ImageButton myB = (ImageButton)sender;
            Session["codigo_sociedad"] = myB.Attributes["codigo_sociedad"];
            Session["annio"] = myB.Attributes["annio"];
            Session["numero_documento_padre"] = myB.Attributes["numero_documento_padre"];
            Session["numero_constancia"] = myB.Attributes["numero_constancia"];
            Session["posicion"] = myB.Attributes["posicion"];
            //string codsoc = myB.Attributes["codigo_sociedad"];
            //string annio = myB.Attributes["annio"];
            //string numdocpad = myB.Attributes["numero_documento_padre"];
            //string numcons = myB.Attributes["numero_constancia"];
            //string url = "reportes/frmDetraccion.aspx?codsoc=" + codsoc + "&annio=" + annio + "&numdocpad=" + numdocpad + "&numcons=" + numcons;
            //string script = "abrirImpresionDocumento('" + url + "');";

            string script = "abrirImpresionDocumento('reportes/frmComprobanteDetraccion.aspx');";
            System.Web.UI.ScriptManager.RegisterStartupScript(this, this.GetType(), "AbrirImpresion", script, true);

        }

        /// <summary>
        /// Permite ver el certificado de retencion
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void lstView_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            // save button Clicked
            if (e.CommandName == "Retencion")
            {
                string[] datos = e.CommandArgument.ToString().Split('|');
                if (datos.Length > 0)
                {
                    if (datos[0].Equals(""))
                    {
                        //no hay retencion
                    }
                    else
                    {
                        //llamamos a la pantalla de retencion
                        Session["sociedad"] = datos[1];
                        Session["annio"] = datos[2];
                        Session["numero_documento"] = datos[3];
                        Session["numero_certificado_retencion"] = datos[0];
                        Session["posicion"] = datos[4];
                        string script = "abrirImpresionDocumentoRetencion('reportes/frmComprobanteRetencion.aspx');";
                        System.Web.UI.ScriptManager.RegisterStartupScript(this, this.GetType(), "AbrirImpresion", script, true);
                    }
                }
                // Find Controls/Retrieve values from the item  here
            }
        }

        protected void Page_Changed(object sender, EventArgs e)
        {
        }


        private void PopulatePager(int recordCount, int currentPage)
        {
            double dblPageCount = (double)((decimal)recordCount / Convert.ToInt32(Session["regPorPagina"]));
            int pageCount = (int)Math.Ceiling(dblPageCount);
            //List<ListItem> pages = new List<ListItem>();
            //if (pageCount > 0)
            //{
            //    pages.Add(new ListItem("Primera", "1", currentPage > 1));
            //    for (int i = 1; i <= pageCount; i++)
            //    {
            //        pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
            //    }
            //    pages.Add(new ListItem("Ultimo", pageCount.ToString(), currentPage < pageCount));
            //}
            List<EnCombo> lst = new List<EnCombo>();

            for (int i = 1; i <= pageCount; i++)
            {
                EnCombo combo = new EnCombo();
                combo.codigo = i.ToString();
                combo.decrip = i.ToString();
                lst.Add(combo);
            }
            DropDownList1.DataSource = lst;
            DropDownList1.DataTextField = "decrip";
            DropDownList1.DataValueField = "codigo";
            DropDownList1.DataBind();
        }

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {

            int pageIndex = int.Parse( DropDownList1.SelectedValue.ToString());
            //seleccionarStock(pageIndex, Convert.ToInt32(Session["regPorPagina"]));

            //0 no es intranet, 1 es intranet
            string intranet = ConfigurationManager.AppSettings["intranet"].ToString();
            DateTime fec = DateTime.ParseExact(txtCalendar.Text.ToString(), "dd/MM/yyyy", null);
            DateTime fecs = DateTime.ParseExact(txtHasta.Text.ToString(), "dd/MM/yyyy", null);
            //ClientScript.RegisterStartupScript(this.GetType(), "Resultado", "alert('" + fec + "----" + txtCalendar.Text.ToString() + "');", true);
            CargarDatos(intranet.Equals("0") ? ((EnProveedor)Session["proveedor"]).lifnr : "",
            fec, fecs
            , ddlSociedad.SelectedItem.Text, txtFolio.Text, intranet, pageIndex, Convert.ToInt32(Session["regPorPagina"]));

            DropDownList1.SelectedValue = pageIndex.ToString();
        }
    }




    internal class sociedad
    {
        public string codigo_sociedad { get; set; }
        public string descripcion_sociedad { get; set; }
    }
}
